// 核心思路，写一个基类Axios请求类，所有的对象类都引用自此基类
// 在基类中引入axios，在基类构造函数中配置好Request、Response拦截器，写好基础的get、put、post、delete方法

import axios from "axios";
import qs from "qs"

export default class BaseHttp {

  constructor() {
    // 添加请求拦截器
    axios.interceptors.request.use(function (config) {
      // 在发送请求之前做些什么
      config.baseURL = ' http://121.196.246.105:4000/api/';
      // config.baseURL = ' http://172.17.0.3:4000/api/';
      config.headers.post['Content-Type'] = 'application/json';
      // config.imgURL='http://121.196.246.105:4000/api/www/'

      // if(config.method==='post'){
      //     config.data=qs.stringify(config.data);
      // }
      return config;
    }, function (error) {
      // 对请求错误做些什么
      return Promise.reject(error);
    });

    // 添加响应拦截器
    axios.interceptors.response.use(function (response) {
      // 2xx 范围内的状态码都会触发该函数。
      // 对响应数据做点什么
      return response;
    }, function (error) {
      // 超出 2xx 范围的状态码都会触发该函数。
      // 对响应错误做点什么
      return Promise.reject(error);
    });
  }
  get(url) {
    return axios.get(url)
  }

  getWithParam(url, param) {
    return axios.get(url, {
      headers: param
    })
  }



  post(url, data) {
    return axios.post(url, data)
      .then(function (response) {
        // console.log(response);
        return response;
      })
      .catch(function (error) {
        // console.log(error);
        return error;
      });
  }

  postWithParams(url, data, param) {
    return axios.post(url, data, {
      headers: param
    })
      .then(function (response) {
        // console.log(response);
        return response;
      })
      .catch(function (error) {
        // console.log(error);
        return error;
      });
  }

  putWithParams(url, data, param) {
    return axios.put(url, data, {
      headers: param
    })
      .then(function (response) {
        // console.log(response);
        return response;
      })
      .catch(function (error) {
        // console.log(error);
        return error;
      });
  }

  //Delete请求方法中没有data参数，考虑解决方式为将所要的data封装为QueryString
  deleteWithParams(url, param) {
    return axios.delete(url, {
      headers: param
    })
      .then(function (response) {
        // console.log(response);
        return response;
      })
      .catch(function (error) {
        // console.log(error);
        return error;
      });
  }

}